home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Animacje, filmy i prezentacje / Kodeki / Haali Media Spliter / MatroskaSplitter.exe / cue2xml.js < prev    next >
Text File  |  2005-11-27  |  4KB  |  163 lines

  1. function W2(n) {
  2.   var s = n.toFixed(0);
  3.   while (s.length < 2)
  4.     s = "0" + s;
  5.   return s;
  6. }
  7.  
  8. function AddTextElement(parent, name, val) {
  9.   var e = xml.createElement(name);
  10.   e.appendChild(xml.createTextNode(val));
  11.   parent.appendChild(e);
  12. }
  13.  
  14. function AddTextElement2(parent, name1, name2, val) {
  15.   var e = xml.createElement(name1);
  16.   AddTextElement(e, name2, val);
  17.   parent.appendChild(e);
  18. }
  19.  
  20. function AddTextElement3(parent, name1, name2, val2, name3, val3) {
  21.   var e = xml.createElement(name1);
  22.   AddTextElement(e, name2, val2);
  23.   AddTextElement(e, name3, val3);
  24.   parent.appendChild(e);
  25. }
  26.  
  27. function AddTextElement4(parent, name1, name2, val2, name3, val3, name4, val4) {
  28.   var e = xml.createElement(name1);
  29.   AddTextElement(e, name2, val2);
  30.   AddTextElement(e, name3, val3);
  31.   AddTextElement(e, name4, val4);
  32.   parent.appendChild(e);
  33. }
  34.  
  35. function AddTextElement5(parent, name0, name1, name2, val2, name3, val3, name4, val4) {
  36.   var e = xml.createElement(name0);
  37.   AddTextElement4(e, name1, name2, val2, name3, val3, name4, val4);
  38.   parent.appendChild(e);
  39. }
  40.  
  41. var xml = new ActiveXObject("Msxml2.DOMDocument.3.0");
  42. var root = xml.createElement("FileInfo");
  43. xml.appendChild(root);
  44.  
  45. var fso = new ActiveXObject("Scripting.FileSystemObject");
  46. var inf = fso.OpenTextFile(WScript.Arguments(0));
  47.  
  48. var Gchaplist = new Array();
  49.  
  50. function AddCh(ch) {
  51.   ch['uid'] = Gchaplist.length + 1;
  52.   Gchaplist.push(ch);
  53. }
  54.  
  55. var Rtitle = /^\s*TITLE "([^"]*)"/;
  56. var Rperformer = /^\s*PERFORMER "([^"]*)"/;
  57. var Rtrack = /^\s*TRACK (\d+)/;
  58. var Rindex = /^\s*INDEX (\d+) (\d+):(\d+):(\d+)/;
  59.  
  60. var Gtitle;
  61. var Gperformer;
  62.  
  63. var ch;
  64.  
  65. while (!inf.AtEndOfStream) {
  66.   var l = inf.ReadLine();
  67.   if (l.match(Rtitle)) {
  68.     if (ch)
  69.       ch['title'] = RegExp.$1;
  70.     else
  71.       Gtitle = RegExp.$1;
  72.   } else if (l.match(Rperformer)) {
  73.     if (ch)
  74.       ch['perf'] = RegExp.$1;
  75.     else
  76.       Gperformer = RegExp.$1;
  77.   } else if (l.match(Rtrack)) {
  78.     if (ch)
  79.       AddCh(ch);
  80.     ch = new Array();
  81.     ch['index'] = new Array();
  82.   } else if (l.match(Rindex)) {
  83.     if (ch) {
  84.       var ii = new Array();
  85.       ii['name'] = RegExp.$1;
  86.       ii['time'] = W2(Math.floor(RegExp.$2 / 60)) + ":" + W2(Math.floor(RegExp.$2 % 60)) + ":" + RegExp.$3 + (parseInt(RegExp.$4) * 2352 / (44100*4)).toFixed(3).substr(1);
  87.       ch['index'].push(ii);
  88.     }
  89.   }
  90. }
  91.  
  92. if (ch)
  93.   AddCh(ch);
  94.  
  95. inf.Close();
  96.  
  97. var xchR = xml.createElement("Chapters");
  98. root.appendChild(xchR);
  99. var xed = xml.createElement("EditionEntry");
  100. xchR.appendChild(xed);
  101. var xtags = xml.createElement("Tags");
  102. root.appendChild(xtags);
  103.  
  104. var uu = Gchaplist.length + 1;
  105.  
  106. for (var ci in Gchaplist) {
  107.   var c = Gchaplist[ci];
  108.  
  109.   var xc = xml.createElement("ChapterAtom");
  110.  
  111.   if (c['title'])
  112.     AddTextElement3(xc, "ChapterDisplay", "ChapterString", c['title'], "ChapterLanguage", "und");
  113.  
  114.   var t;
  115.   for (var iii in c['index']) {
  116.     var ii = c['index'][iii];
  117.  
  118.     if (ii['name'] == "01")
  119.       t = ii['time'];
  120.     else if (ii['name'] == "00" && !t)
  121.       t = ii['time'];
  122.  
  123.     var xz = xml.createElement("ChapterAtom");
  124.  
  125.     AddTextElement(xz, "ChapterFlagHidden", "1");
  126.     AddTextElement2(xz, "ChapterDisplay", "ChapterString", "INDEX " + ii['name']);
  127.     AddTextElement(xz, "ChapterTimeStart", ii['time']);
  128.     AddTextElement(xz, "ChapterPhysicalEquiv", "10");
  129.     AddTextElement(xz, "ChapterUID", uu);
  130.  
  131.     xc.appendChild(xz);
  132.  
  133.     ++uu;
  134.   }
  135.  
  136.   if (t)
  137.     AddTextElement(xc, "ChapterTimeStart", t);
  138.  
  139.   AddTextElement(xc, "ChapterUID", c['uid']);
  140.  
  141.   xed.appendChild(xc);
  142.  
  143.   var xt = xml.createElement("Tag");
  144.   AddTextElement2(xt, "Targets", "ChapterUID", c['uid']);
  145.   AddTextElement3(xt, "Simple", "Name", "PART_NUMBER", "String", c['uid']);
  146.   if (c['title'])
  147.     AddTextElement4(xt, "Simple", "Name", "TITLE", "String", c['title'], "Language", "und");
  148.   if (c['perf'])
  149.     AddTextElement4(xt, "Simple", "Name", "ARTIST", "String", c['perf'], "Language", "und");
  150.  
  151.   xtags.appendChild(xt);
  152. }
  153.  
  154. if (Gperformer)
  155.   AddTextElement5(xtags, "Tag", "Simple", "Name", "ARTIST", "String", Gperformer, "Language", "und");
  156.  
  157. if (Gtitle) {
  158.   AddTextElement5(xtags, "Tag", "Simple", "Name", "TITLE", "String", Gtitle, "Language", "und");
  159.   AddTextElement2(root, "Info", "Title", Gtitle);
  160. }
  161.  
  162. xml.save(WScript.Arguments(1));
  163.